home *** CD-ROM | disk | FTP | other *** search
- *
- * Cooley-Tukey Radix-2, DIF FFT Program for the TMS32010.
- *
- * Single FFT butterfly.
- * Complex input data - size limited only by program memory availability.
- * Uses table lookup of the twiddle factors.
- * No scaling is done on intermediate values in the program.
- * External data RAM is addressed via peripheral I/O instructions.
- * An address counter is required and is loaded by a write to
- * port 0. Data is read from and written to RAM via port 1.
- * The address counter should increment after every read or write.
- * Data in the external RAM assumes complex data with corresponding
- * real and imaginary data values in consecutive locations.
- *
- *
- * N is the size of the transform. N = 2**M.
- N EQU 64
- M EQU 6
- *
- * Data Memory Allocation.
- *
- XI EQU 0 * Array value X(I)
- YI EQU 1 * Array value Y(I)
- XL EQU 2 * Array value X(L)
- YL EQU 3 * Array value Y(L)
- XT EQU 4 * Temporary - real part
- YT EQU 5 * Temporary - imaginary part
- I EQU 6 * 1st index
- L EQU 7 * 2nd index
- COS EQU 8 * Twiddle factor - real part
- SIN EQU 9 * Twiddle factor - imaginary part
- IA EQU 10 * Index to twiddle factors
- IE EQU 11 * Increment to IA
- HOLDN EQU 12 * Contains value N
- QUARTN EQU 13 * Contains value N/4
- N1 EQU 14 * Increment to I.
- N2 EQU 15 * Separation of I and L
- J EQU 16 * Loop counter
- ONE EQU 17 * Contains value 1
- TABLE EQU 18 * Location of coefficient table
- *
- * Begin program memory section.
- *
- ORG 0
- START LDPK 0
- LACK 1
- SACL ONE * Initialize IE = 1
- SACL IE
- LT ONE
- MPYK SINE
- PAC
- SACL TABLE * Table has address of cosine table
- MPYK N
- PAC
- SACL HOLDN * Holdn = N
- SACL N2 * Initialize N2 = N
- LAC HOLDN,14
- SACH QUARTN * Quartn = N/4
- LARK AR0,M-1 * AR0 contains K counter
- KLOOP LARP 1
- LAC N2,15
- SACH N1,1 * N1 = N2
- SACH N2 * N2 = N2/2
- ZAC
- SACL IA
- SACL J
- LAR AR1,N2 * AR1 contains J value
- MAR *- * Start at N2-1
- JLOOP LAC TABLE * Table is full size
- ADD IA
- TBLR SIN * Get twiddle factors
- ADD QUARTN
- TBLR COS
- LAC IA
- ADD IE
- SACL IA * IA = IA + IE
- LAC J,1
- SACL I * I = J (data organized as real value followed
- * * by imaginary so address I is 2 times J).
- ILOOP LAC I
- ADD N2,1 * L = I + N2
- SACL L
- *
- OUT I,PA0 * Output address of XI
- IN XI,PA1 * Read real and imaginary parts
- IN YI,PA1
- OUT L,PA0 * Output address of XL
- IN XL,PA1 * Read real and imaginary parts
- IN YL,PA1
- *
- * Compute butterfly.
- *
- LAC XI
- SUB XL
- SACL XT * XT = XI - XL
- ADD XL,1
- SACL XI * XI = XI + XL
- LAC YI
- SUB YL
- SACL YT * YT = YI - YL
- ADD YL,1
- SACL YI * YI = YI + YL
- LT COS
- MPY YT
- PAC
- LT SIN
- MPY XT
- SPAC
- SACH YL,1 * YL = COS*YT - SIN*XT
- MPY YT
- PAC
- LT COS
- MPY XT
- APAC
- SACH XL,1 * XL = COS*XT + SIN*YT
- *
- * Output results of the butterfly.
- *
- OUT I,PA0 * Output I value address.
- OUT XI,PA1 * Output real and imaginary parts.
- OUT YI,PA1
- OUT L,PA0 * Output L value address.
- OUT XL,PA1 * Output real and imaginary parts.
- OUT YL,PA1
- *
- * Add increment for next loop.
- *
- LAC I
- ADD N1,1 * I = I + N1
- SACL I
- SUB HOLDN,1 * While I < N
- BLZ ILOOP
- LAC J
- ADD ONE * J = J + 1
- SACL J
- BANZ JLOOP
- LAC IE,1
- SACL IE * IE = 2 * IE
- LARP 0
- BANZ KLOOP
- *
- * Digit reverse counter for radix-2 FFT computation.
- *
- DRC2 ZAC
- SACL L
- SACL I
- LARP 0
- LAR AR0,HOLDN * For I = 0 to N-2
- MAR *-
- MAR *-
- DRLOOP SUB L * If I < L, then swap
- BGEZ NOSWAP
- * Swap i and l values.
- OUT I,PA0
- IN XI,PA1
- IN YI,PA1
- OUT L,PA0
- IN XL,PA1
- IN YL,PA1
- OUT L,PA0
- OUT XI,PA1
- OUT YI,PA1
- OUT I,PA0
- OUT XL,PA1
- OUT YL,PA1
- NOSWAP LAC HOLDN
- SACL J * J = N
- INLOOP LAC L
- SUB J * If L >= J then
- BLZ OUTL
- SACL L * L = L - J
- LAC J,15
- SACH J * J = J/2.
- B INLOOP
- OUTL ADD J,1
- SACL L * L = L + J
- LAC I
- ADD ONE,1
- SACL I * Increment I
- BANZ DRLOOP
- *
- * FFT complete.
- *
- WHOA B WHOA
- *
- * Coefficient table (size of table is 3n/4).
- *
- SINE EQU $
- DATA 0
- DATA 3211
- DATA 6392
- DATA 9511
- DATA 12539
- DATA 15446
- DATA 18204
- DATA 20787
- DATA 23169
- DATA 25329
- DATA 27244
- DATA 28897
- DATA 30272
- DATA 31356
- DATA 32137
- DATA 32609
- COSINE EQU $
- DATA 32767
- DATA 32609
- DATA 32137
- DATA 31356
- DATA 30272
- DATA 28897
- DATA 27244
- DATA 25329
- DATA 23169
- DATA 20787
- DATA 18204
- DATA 15446
- DATA 12539
- DATA 9511
- DATA 6392
- DATA 3211
- DATA 0
- DATA -3211
- DATA -6392
- DATA -9511
- DATA -12539
- DATA -15446
- DATA -18204
- DATA -20787
- DATA -23169
- DATA -25329
- DATA -27244
- DATA -28897
- DATA -30272
- DATA -31356
- DATA -32137
- DATA -32609
- END
-